From 7201f0d609b7314a70b0dcfed6d41ca61d528c99 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Tue, 19 Aug 2003 23:47:22 +0000 Subject: [PATCH] (term_init): Use a buffer of size 4096 for tgetent since FreeBSD returns something longer than 2044. Abort if the end of the buffer is overwritten. --- src/term.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/term.c b/src/term.c index 829f2d88e6b..66232ab204d 100644 --- a/src/term.c +++ b/src/term.c @@ -2159,7 +2159,8 @@ term_init (terminal_type) { char *area; char **address = &area; - char buffer[2044]; + char *buffer = NULL; + const int buffer_size = 4096; register char *p; int status; struct frame *sf = XFRAME (selected_frame); @@ -2171,9 +2172,6 @@ term_init (terminal_type) area = (char *) xmalloc (2044); - if (area == 0) - abort (); - FrameRows = FRAME_LINES (sf); FrameCols = FRAME_COLS (sf); specified_window = FRAME_LINES (sf); @@ -2202,6 +2200,7 @@ term_init (terminal_type) Wcm_clear (); + buffer = (char *) xmalloc (buffer_size); status = tgetent (buffer, terminal_type); if (status < 0) { @@ -2229,13 +2228,11 @@ to do `unset TERMCAP' (C-shell: `unsetenv TERMCAP') as well.", terminal_type); #endif } -#ifdef TERMINFO - area = (char *) xmalloc (2044); -#else - area = (char *) xmalloc (strlen (buffer)); -#endif /* not TERMINFO */ - if (area == 0) + + if (strlen (buffer) >= buffer_size) abort (); + + area = (char *) xmalloc (strlen (buffer)); TS_ins_line = tgetstr ("al", address); TS_ins_multi_lines = tgetstr ("AL", address); @@ -2560,6 +2557,8 @@ to do `unset TERMCAP' (C-shell: `unsetenv TERMCAP') as well.", FRAME_CAN_HAVE_SCROLL_BARS (sf) = 0; FRAME_VERTICAL_SCROLL_BAR_TYPE (sf) = vertical_scroll_bar_none; #endif /* WINDOWSNT */ + + xfree (buffer); } /* VARARGS 1 */ -- 2.30.2